Google CloudのTerraformでリソース作成するチュートリアルをやってみた
みなさん、こんにちは!
クルトンです。
今回は、Google CloudのリソースをTerraformで作成するチュートリアルを実行してみました。以前のブログではAWSリソースの作成をしていたのですが「Google Cloudだとどういう感じなんだろう?」と気になっておりました。 そんなとき、ちょうどよくGoogle Cloudさん側でナイスなチュートリアルを発見したのでやってみる事にしてみました。
前提
Google Cloudのプロジェクトが作られている状態で開始します。
また、Compute Engineを使うため、APIを有効化しておいてください。
Terraform実行にはCloud Shellが便利で、すぐに実行できます。チュートリアルでも使用すると書いてあるのでそちら利用します。
やってみた
まず最初にGoogle Cloudコンソールを開きます。
その後、Cloud Shellの起動をします。画面上部、右側のボタンをクリックしてください。
ウェブサーバーとなるVMの作成まで
以降は、Cloud Shellのターミナル上での操作になります。
以下のコマンドを順番に実行してください。
- 今回作成するtfファイルを置くフォルダの作成と移動
mkdir tf-tutorial && cd tf-tutorial
- ファイルの作成
nano main.tf
main.tfへ以下の内容を書きます。
resource "google_compute_network" "vpc_network" { name = "my-custom-mode-network" auto_create_subnetworks = false mtu = 1460 } resource "google_compute_subnetwork" "default" { name = "my-custom-subnet" ip_cidr_range = "10.0.1.0/24" region = "us-west1" network = google_compute_network.vpc_network.id } # Create a single Compute Engine instance resource "google_compute_instance" "default" { name = "flask-vm" machine_type = "f1-micro" zone = "us-west1-a" tags = ["ssh"] boot_disk { initialize_params { image = "debian-cloud/debian-11" } } # Install Flask metadata_startup_script = "sudo apt-get update; sudo apt-get install -yq build-essential python3-pip rsync; pip install flask" network_interface { subnetwork = google_compute_subnetwork.default.id access_config { # Include this section to give the VM an external IP address } } }
次にTerraform実行時の初回時に必要なコマンドを叩きます。(先ほど作ったtfファイル以外にもファイルが作成されます。)
terraform init
成功すると、次の画像のような画面が現れるかと思います。
initし終わると、リソース作成のコマンドであるterraform apply
コマンドが実行できるのですが、作って大丈夫そうか、確認をしておきます。次のコマンドを叩いてください。
terraform plan
terraform plan
コマンドを叩くと、次の画像のようなものが出るかもしれません。承認をクリックでOKです!
作っても大丈夫かをチェックするのは、実際に必要なリソース作成をする場合において、重要な工程です。チュートリアルではありますが念の為に確認しておきました。
では実際にリソース作成をしていきます。次のコマンドを叩いてください。
terraform apply
作っても良いか、yesと打ち込む必要があります。yesと打ち込んだ後にEnterキーを押して数分待ちます。
数分待った後、Apply complete! Resources: ~~~~.
というふうに表示されるかと思います。実際にVMインスタンスが作成されているか確認すると、flask-vm
という名前で作成されているかと思います。(作成されていないように見えましたら、リロードしてみてください。)
ウェブサーバーを起動する
Webサーバーにするためのインスタンス作成が終わりました。次に、接続できるようにネットワークの設定を追加します。
再びmain.tf
ファイルを修正します。以下の内容を末尾に追加してください。(nanoコマンドでファイルを開いて修正したら良いです。)
resource "google_compute_firewall" "ssh" { name = "allow-ssh" allow { ports = ["22"] protocol = "tcp" } direction = "INGRESS" network = google_compute_network.vpc_network.id priority = 1000 source_ranges = ["0.0.0.0/0"] target_tags = ["ssh"] }
修正終わりましたら、リソース作成・変更のためのコマンドを叩きます。先ほどと同じく、次のコマンドを叩いてください。
terraform apply
次にWebサーバーに繋がったときに応答をするPythonファイルを作成していきます。 Webサーバーの中で作業をするため、ssh接続していきます。
VMインスタンスのflask-vm
という名前から右に行くと、接続というカラムの中にSSHと書かれているかと思います。これをクリックしてください。
クリックすると新しいウィンドウが開かれます。
クリック後に、次の画像のような画面が出てくるかと思います。Authorizeをクリックしてください。
接続できましたら、次のコマンドを叩いてファイル作成を開始します。
nano app.py
ファイルに記述する内容は次の通りです。
from flask import Flask app = Flask(__name__) @app.route('/') def hello_cloud(): return 'Hello Cloud!' app.run(host='0.0.0.0')
記入終わりましたら、サーバーを起動するために次のコマンドを叩いておいてください。
python3 app.py
実行できましたら、ウィンドウを消さずに置いておいてください。
では、実際にアクセスしてみましょう!
Google Cloud コンソールに再び戻りまして、先ほどと同じくVMインスタンスのflask-vm
という名前の接続というカラムの中にあるSSHをクリックしてください。
新しくSSH接続して開かれた画面で、次のコマンドを叩いてください。
curl http://0.0.0.0:5000
ターミナル上にHello Cloud
と表示されていたら、成功です!
ローカルマシンからサーバーに接続する
次にローカルマシンから接続できるように修正をしていきます。Cloud Shellで開いているターミナルでmain.tf
ファイルを再度nanoコマンドで開き、次の内容を末尾に追加してください。
resource "google_compute_firewall" "flask" { name = "flask-app-firewall" network = google_compute_network.vpc_network.id allow { protocol = "tcp" ports = ["5000"] } source_ranges = ["0.0.0.0/0"] } // A variable for extracting the external IP address of the VM output "Web-server-URL" { value = join("",["http://",google_compute_instance.default.network_interface.0.access_config.0.nat_ip,":5000"]) }
追加終わりましたら、忘れずにterraform apply
をしておいてください!
terraform apply
完了すると、Cloud Shell上に次のようなURLが表示されます。
Web-server-URL = "http://IP_ADDRESS:5000"
httpから始まるURL部分をクリックできますので、クリックしてみてください。
Hello Cloud!
と書かれたページが表示されます。
これでチュートリアルとしては終わりなので、SSH接続で開かれたウィンドウについてはexit
とコマンドを叩いて終了してください。
リソースの削除
Terraformで作成したリソースについては、terraform destroy
コマンドを実行すると全て削除可能です。今後使うご予定がある場合を除いて、削除をすると良いかと思います。(main.tfファイルがあるので、再度必要になった場合は、terraform apply
コマンドで同じ構成を数分で作成が可能です。)
終わりに
Google Cloud公式のチュートリアルで、Terraformを使ったリソース作成があったのでやってみました。 Terraformを使うと、簡単に環境を作ったり破棄したりする事が可能ですが、Google Cloudでも使えるのは便利ですね。
今回はここまで。
それでは、また!